\chapter{Design Iterations}
As with any large project, it was necessary to refine various aspects of the
design through multiple iterations. This was either to adjust for constraints
which were not immediately obvious in the initial design, or to accommodate
decisions which were initially overly ambitious.

    \section{Ruby on Rails}\label{sec:ruby}
Originally, the CEAB++ system was to be written using Ruby on Rails.  Rails was
chosen because it was thought to be more accessible than Django for a novice
developer who was familiar with neither Ruby nor Python, making it easier to
develop and maintain and thus would be a superior choice were the project ever
to replace the original CEAB planner.

However, the decision to switch to Django was made in order to make use of the
skills and collective past experience of the team. As the term progressed, the
team gained more collective Django experience through work with design projects
in other courses. It is hoped that this, ultimately, resulted in a higher
quality final project.

    \section{User Interface}
The user interface was initially designed to have drag-and-drop functionality.
The user would search for a particular course of interest, and drag courses from
the search results to a shortlist. A mockup of this interface can be seen in
Figure \ref{fig:coreQuery_old}.

\begin{figure}
\centering
\includegraphics[scale=0.4]{images/coreQuery_old}
\caption{Old User Interface for Searching Courses}
\label{fig:coreQuery_old}
\end{figure}

The user would then move to the plan interface, and be able to drag courses from
the shortlist into the plan. The shortlist was essentially a feature which would
allow the user to move courses between the plan interface and the search
interface, and the user would do so by dragging and dropping courses. A mockup
of the plan interface with the shortlist can be see in Figure
\ref{fig:plan_old}.

However, while the drag-and-drop action was attractive from a design standpoint,
its implementation proved difficult. One particularly challenging failure
mode occurred when a list would overflow and there were more elements than
could fit in a single view. The combination of dragging and dropping with
the scroll action proved to be beyond the scope of what could be completed
for the project. In turn, a simplified interface--one where the user simply
added courses to the plan by means of selecting them and subsequently
clicking an ``Add Course'' button--proved to be much more straightforward to
implement. It should be noted that this did not negatively impact on the
project's ability to satisfy the original design requirements, but was
rather a small implementation detail which needed to be changed due to time
constraints.

\begin{figure}
\centering
\includegraphics[scale=0.4]{images/plan_old}
\caption{Old User Interface for Viewing CEAB Plans}
\label{fig:plan_old}
\end{figure}

